package config

import (
	"gopkg.in/ini.v1"
	"log"
)

type ServiceConfig struct {
	ServiceName  string   `ini:"service_name"`
	Port         string   `ini:"port"`
	RegistryAddr string   `ini:"registry_addr"`
	Mode         string   `ini:"mode"`
	Version      string   `ini:"version"`

	DBMaster DataBase `ini:"db_master"`
	DBSlave  DataBase `ini:"db_slave"`
	Redis    Redis    `ini:"redis"`
}

type DataBase struct {
	DataSourceName string `ini:"dsn"`
	MaxIdleConns   int32  `ini:"max_idle_conns"`
	MaxOpenConns   int32  `ini:"max_open_conns"`
}

type Redis struct {
	NetWork  string `ini:"net_work"`
	Addr     string `ini:"addr"`
	Port     string `ini:"port"`
	Password string `ini:"password"`
	Prefix   string `ini:"prefix"`
}

var config  = new(ServiceConfig)

func GetConfig() *ServiceConfig {
	return config
}

func InitConfig(path string) *ServiceConfig {
	cfg, err := ini.Load(path)
	if err != nil {
		log.Fatal("InitConfig: ", path, ".  config err: ", err.Error())
	}

	err = cfg.MapTo(config)

	if err != nil {
		log.Fatal("InitConfig: ", path, ".  MapTo err: ", err.Error())
	}

	return config
}
